/***************************************************************
|	File:		Vector3.h
|	Author:		Michael Mozdzierz
|	Date:		05/24/2014
|
***************************************************************/

#pragma once

struct Vector2;

struct Vector3
{
	float x, y, z;	

	Vector3(void);
	Vector3(float x, float y, float z);
	Vector3(Vector2& v, float z);

	void Normalize(void);
	float GetLength(void) const;

	Vector3& operator-();
	Vector3& operator += (Vector3&);
	Vector3& operator -= (Vector3&);

	static float Dot(Vector3& a, Vector3& b);
	static Vector3 Normalize(Vector3& v);
	static Vector3 Cross(Vector3& a, Vector3& b);

	static Vector3 Zero;

	static Vector3 Up;
	static Vector3 Down;
	static Vector3 Left;
	static Vector3 Right;
	static Vector3 Forward;
	static Vector3 Backward;
};

Vector3 operator +(Vector3&, Vector3&);
Vector3 operator -(Vector3&, Vector3&);
float operator *(Vector3&, Vector3&);
Vector3 operator* (Vector3&, float);
Vector3 operator* (float, Vector3&);
Vector3 operator /(Vector3&, float);
Vector3 operator /(float, Vector3&);